package com.cxt.controller;

//import com.cxt.context.BaseConBaseContexttext;
import com.cxt.context.BaseContext;
import com.cxt.dto.CarpoolAddDto;
import com.cxt.dto.CarpoolInfoDto;
import com.cxt.dto.CarpoolTjDto;
import com.cxt.entity.CarpoolInfo;
import com.cxt.result.Result;
import com.cxt.service.ICarpoolInfoService;
import com.cxt.vo.CarpoolInfoVo;
import com.cxt.vo.CarpoolPreviewVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
//import com.baomidou.entity.CarpoolInfo;

/**
 * <p>
 * 拼车信息表 前端控制器
 * </p>
 *
 * @author baomidou
 * @since 2025-02-27
 */
@RestController
@RequestMapping("/carpoolInfo")
@Slf4j
public class CarpoolInfoController {
    @Autowired
    private ICarpoolInfoService carpoolInfoService;

    /**
     * 业务接口：用户发起拼车信息
     */
    //carpoolInfo/addCarpoolInfo
    @PostMapping("/addCarpoolInfo")
    public Result userAddCarpoolInfo(@RequestBody CarpoolInfoDto carpoolInfoDto) {
        log.info("添加拼车信息表");
        Boolean b = carpoolInfoService.addCarpoolInfo(carpoolInfoDto);
        if (!b) {
            return Result.error("添加失败");
        }else {
            return Result.success("添加成功");
        }
    }
    /**
     * 业务接口：拼车信息预览列表
     */
    @GetMapping("/preview")
    public Result<List> previewCarpoolInfo() {
        log.info("拼车信息预览列表");
        List<CarpoolPreviewVo> carpoolInfos = carpoolInfoService.previewCarpoolInfo();
        return Result.success(carpoolInfos);
    }
    /**
     * 智能推荐：根据起始点获取拼车信息预览表
     */
    @PostMapping("/previewByStart")
    public Result<List> previewCarpoolInfoByStart(@RequestBody CarpoolTjDto carpoolInfoDto) {
        log.info("智能推荐：根据起始点获取拼车信息预览表");
        List<CarpoolPreviewVo> carpoolInfos = carpoolInfoService.previewCarpoolInfoByStart(carpoolInfoDto);
        return Result.success(carpoolInfos);
    }
    /**
     * 业务接口：获取当前用户的拼车信息预览表
     */
    @GetMapping("/previewByUserId")
    public Result<List> previewCarpoolInfoByUserId() {
        log.info("获取当前用户的拼车信息预览表");
        //模拟设置ID
        BaseContext.setCurrentId(1L);
        List<CarpoolPreviewVo> carpoolInfos = carpoolInfoService.previewCarpoolInfoByID();
        return Result.success(carpoolInfos);
    }
    /**
     * 业务接口：获取拼车详情
     */
    @GetMapping("/getByID")
    public Result<CarpoolInfoVo> getCarpoolInfoByID(@RequestParam("id") Long id) {
        log.info("获取拼车详情");
        CarpoolInfoVo carpoolPreviewVo = carpoolInfoService.getCarpoolInfoByID(id);
        return Result.success(carpoolPreviewVo);
    }
    /**
     * 业务接口：用户加入拼车
     * 前端参数：拼车信息ID，加入身份，加入人数，加入的起始点，加入的终点点
     */
    @PostMapping("/addJoin")
    public Result addJoinCarpoolInfo(@RequestBody CarpoolAddDto carpoolAddDto) {
        log.info("用户加入拼车");
        //获取用户ID
        Long userId = BaseContext.getCurrentId();
        carpoolAddDto.setUserId(userId);
        Boolean b = carpoolInfoService.addCarpoolInfo(carpoolAddDto);
        return b ? Result.success("加入成功") : Result.error("加入失败");
    }
    /**
     * 业务接口：用户退出拼车
     * 前端参数：拼车信息Id
     */
    @GetMapping("/removeJoin")
    public Result removeJoinCarpoolInfo(Long  id ) {
        log.info("用户退出拼车");
        Boolean b =carpoolInfoService.removeJoin(id);
        return b ? Result.success("退出成功") : Result.error("退出失败");
    }
    /**
     * 添加拼车信息表
     */
    @PostMapping("/add")
    public Result addCarpoolInfo(@RequestBody CarpoolInfo carpoolInfo) {
        log.info("添加拼车信息表");
        boolean isAdd = carpoolInfoService.save(carpoolInfo);
        if (!isAdd) {
            return Result.error("添加失败");
        }
        return Result.success();
    }
    /**
     * 根据id删除拼车信息表
     */
    @GetMapping("/delete")
    public Result deleteCarpoolInfo(@RequestBody CarpoolInfo carpoolInfo) {
        log.info("删除拼车信息表,id:{}", carpoolInfo.getId());
        boolean isDelete = carpoolInfoService.removeById(carpoolInfo.getId());
        if (!isDelete) {
            return Result.error("删除失败");
        }
        return Result.success("删除成功");
    }
    /**
     * 修改拼车信息表
     */
    @PostMapping("/update")
    public Result updateCarpoolInfo(@RequestBody CarpoolInfo carpoolInfo) {
        log.info("修改拼车信息表");
        boolean isUpdate = carpoolInfoService.updateById(carpoolInfo);
        if (!isUpdate) {
            return Result.error("修改失败");
        }
        return Result.success();
    }
    /**
     * 查询拼车信息表
     */
    @GetMapping("/get")
    public Result getCarpoolInfo() {
        log.info("查询拼车信息表");
       List<CarpoolInfo> carpoolInfos = carpoolInfoService.list();
        return Result.success(carpoolInfos);
    }

}
